from django.db.models import Count
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response

from .models import BorrowLog
from .serializers import BorrowLogSerializer
from .serializers import BorrowRateSerializer


class BorrowLogViewSet(viewsets.ModelViewSet):
    '''
    list: 查询所有BorrowLog
    create: 新增BorrowLog
    retrieve: 查询单个BorrowLog, 文档名: read,接口名: retrieve
    update: 更新BorrowLog
    destroy: 删除BorrowLog
    
    month_count: 查询月度借用情况
    此操作用于获取指定日期范围（例如2024年1月1日至2024年2月1日）内，
    每一类资产被借用的总次数。结果按类别分组，并统计每类的借用次数。

    请求方法: GET

    成功响应:

    - HTTP状态码: 200 OK
    - 内容类型: application/json
    - 数据格式:
    [
        {
        "category_name": "电子设备",
        "count": 50
        },
        {
        "category_name": "办公家具",
        "count": 30
        },
        ...
    ]

    错误响应:

    - 未找到数据或请求错误时，将返回相应的HTTP错误状态码及错误信息。
    '''
    queryset = BorrowLog.objects.all()
    serializer_class = BorrowLogSerializer

    @action(detail=False, methods=['get'])
    def use_rate(self, request):
        queryset = BorrowLog.objects.all().values('equipment__category__name').annotate(
            count=Count('id'))
        total_count = BorrowLog.objects.all().count()
        use_rate = [{
            'category': item['equipment__category__name'],
            'use_rate': item['count'] / total_count * 100
        } for item in queryset]
        serializer = BorrowRateSerializer(use_rate, many=True)
        return Response(serializer.data)
